From: Keir Fraser Date: Tue, 15 Jul 2008 16:59:31 +0000 (+0100) Subject: fs-backend: Fix freelist implementation X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14188^2~14 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=3123fe0fc48c030f8b3c785741df041210923942;p=xen.git fs-backend: Fix freelist implementation Signed-off-by: Samuel Thibault --- diff --git a/tools/fs-back/fs-backend.c b/tools/fs-back/fs-backend.c index fd5ba2b46b..71518f0aa2 100644 --- a/tools/fs-back/fs-backend.c +++ b/tools/fs-back/fs-backend.c @@ -110,9 +110,9 @@ void allocate_request_array(struct mount *mount) unsigned short *freelist; requests = malloc(sizeof(struct fs_request) *nr_entries); - freelist = malloc(sizeof(unsigned short) * nr_entries); + freelist = malloc(sizeof(unsigned short) * (nr_entries + 1)); memset(requests, 0, sizeof(struct fs_request) * nr_entries); - memset(freelist, 0, sizeof(unsigned short) * nr_entries); + memset(freelist, 0, sizeof(unsigned short) * (nr_entries + 1)); for(i=0; i< nr_entries; i++) { requests[i].active = 0; diff --git a/tools/fs-back/fs-backend.h b/tools/fs-back/fs-backend.h index 9150d214a5..bf54dae531 100644 --- a/tools/fs-back/fs-backend.h +++ b/tools/fs-back/fs-backend.h @@ -72,14 +72,14 @@ extern struct fs_op *fsops[]; static inline void add_id_to_freelist(unsigned int id,unsigned short* freelist) { - freelist[id] = freelist[0]; + freelist[id + 1] = freelist[0]; freelist[0] = id; } static inline unsigned short get_id_from_freelist(unsigned short* freelist) { unsigned int id = freelist[0]; - freelist[0] = freelist[id]; + freelist[0] = freelist[id + 1]; return id; }